home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / bbs_util / bsrc_260.zip / INCLUDE.ZIP / BINK.H < prev    next >
C/C++ Source or Header  |  1996-04-07  |  33KB  |  944 lines

  1. /*--------------------------------------------------------------------------*/
  2. /*                                                                          */
  3. /*                                                                          */
  4. /*      ------------         Bit-Bucket Software, Co.                       */
  5. /*      \ 10001101 /         Writers and Distributors of                    */
  6. /*       \ 011110 /          Freely Available<tm> Software.                 */
  7. /*        \ 1011 /                                                          */
  8. /*         ------                                                           */
  9. /*                                                                          */
  10. /*              (C) Copyright 1987-96, Bit Bucket Software Co.              */
  11. /*                                                                          */
  12. /*                                                                          */
  13. /*                                                                          */
  14. /*                  Major definitions used in BinkleyTerm                   */
  15. /*                                                                          */
  16. /*                                                                          */
  17. /*    For complete  details  of the licensing restrictions, please refer    */
  18. /*    to the License  agreement,  which  is published in its entirety in    */
  19. /*    the MAKEFILE and BT.C, and also contained in the file LICENSE.260.    */
  20. /*                                                                          */
  21. /*    USE  OF THIS FILE IS SUBJECT TO THE  RESTRICTIONS CONTAINED IN THE    */
  22. /*    BINKLEYTERM  LICENSING  AGREEMENT.  IF YOU DO NOT FIND THE TEXT OF    */
  23. /*    THIS  AGREEMENT IN ANY OF THE  AFOREMENTIONED FILES,  OR IF YOU DO    */
  24. /*    NOT HAVE THESE FILES,  YOU  SHOULD  IMMEDIATELY CONTACT BIT BUCKET    */
  25. /*    SOFTWARE CO.  AT ONE OF THE  ADDRESSES  LISTED BELOW.  IN NO EVENT    */
  26. /*    SHOULD YOU  PROCEED TO USE THIS FILE  WITHOUT HAVING  ACCEPTED THE    */
  27. /*    TERMS  OF  THE  BINKLEYTERM  LICENSING  AGREEMENT,  OR  SUCH OTHER    */
  28. /*    AGREEMENT AS YOU ARE ABLE TO REACH WITH BIT BUCKET SOFTWARE, CO.      */
  29. /*                                                                          */
  30. /*                                                                          */
  31. /* You can contact Bit Bucket Software Co. at any one of the following      */
  32. /* addresses:                                                               */
  33. /*                                                                          */
  34. /* Bit Bucket Software Co.        FidoNet  1:104/501, 1:343/491             */
  35. /* P.O. Box 460398                AlterNet 7:42/1491                        */
  36. /* Aurora, CO 80046               BBS-Net  86:2030/1                        */
  37. /*                                Internet f491.n343.z1.fidonet.org         */
  38. /*                                                                          */
  39. /* Please feel free to contact us at any time to share your comments about  */
  40. /* our software and/or licensing policies.                                  */
  41. /*                                                                          */
  42. /*--------------------------------------------------------------------------*/
  43.  
  44. /*--------------------------------------------------------------------------*/
  45. /* LEGIBLE SECTION.  Definitions to make "C" look like a real language.     */
  46. /*--------------------------------------------------------------------------*/
  47.  
  48. #ifndef BINK_DEFINED
  49. #define BINK_DEFINED
  50.  
  51. #ifndef max
  52. #define max(a,b)     ((a)>(b)?(a):(b))
  53. #endif
  54.  
  55. #ifndef min
  56. #define min(a,b)     ((a)<=(b)?(a):(b))
  57. #endif
  58.  
  59. /*
  60.  * updcrc macro derived from article Copyright (C) 1986 Stephen Satchell.
  61.  *  NOTE: First argument must be in range 0 to 255.
  62.  *        Second argument is referenced twice.
  63.  *
  64.  * Programmers may incorporate any or all code into their programs,
  65.  * giving proper credit within the source. Publication of the
  66.  * source routines is permitted so long as proper credit is given
  67.  * to Stephen Satchell, Satchell Evaluations and Chuck Forsberg,
  68.  * Omen Technology.
  69.  */
  70.  
  71. #define updcrc(cp, crc) ( crctab[((crc >> 8) & 255) ^ cp] ^ (crc << 8))
  72.  
  73. /* We need it the other way around for BinkleyTerm */
  74. #define xcrc(crc,cp) ( crctab[((crc >> 8) & 255) ^ cp] ^ (crc << 8))
  75.  
  76. typedef unsigned bit;
  77. typedef unsigned short word;
  78. typedef unsigned char byte;
  79.  
  80. #define fallthrough
  81.  
  82. #define LOCAL        static
  83. #define empty_str    ""
  84.  
  85. /* The following changes by Greylock Software, to facilitate the MEWEL
  86.  * version of Bink.
  87.  */
  88.  
  89. #define PRDCT_NM(m)     PrdctTbl[m]
  90. #define WELCOME_LEN     1024
  91.  
  92. #define POLL_POPUP
  93. #define EventSub()
  94.  
  95. struct _lang_hdr
  96. {
  97.     short ElemCnt;
  98.     short PoolSize;
  99. };
  100.  
  101. struct _key_fnc
  102. {
  103.     short FncIdx;
  104.     short ScanCode;
  105. };
  106.  
  107. struct _key_fnc_hdr
  108. {
  109.     short KeyFncCnt;
  110.     short *KeyFncAry;
  111.     struct _key_fnc *KeyFncTbl;
  112. };
  113.  
  114. #define FA_RDONLY   0x01        /* File is readonly */
  115. #define FA_HIDDEN   0x02        /* File is hidden   */
  116. #define FA_SYSTEM   0x04        /* System file      */
  117. #define FA_VOLID    0x08        /* Volume ID        */
  118. #define FA_SUBDIR   0x10        /* Subdirectory     */
  119. #define FA_ARCH     0x20        /* Archive file     */
  120.  
  121. struct FILEINFO
  122. {
  123.     char rsvd[21];
  124.     char attr;
  125.     long time;
  126.     long size;
  127.     char name[13];
  128.     char nill;
  129. };
  130.  
  131. #define DENY_ALL   0
  132. #define DENY_NONE  1
  133. #define DENY_READ  2
  134. #define DENY_RDWR  3
  135. #define DENY_WRITE 4
  136.  
  137. typedef struct pnums
  138. {
  139.     char num[20];
  140.     char pre[20];
  141.     char suf[20];
  142.     short len;
  143.     struct pnums *next;
  144. } PN_TRNS;
  145.  
  146. typedef struct anums
  147. {
  148.     char *num;
  149.     char *alt;
  150.     struct anums *next;
  151. } ANUMS, *P_ANUMS;
  152.  
  153. typedef struct mnums
  154. {
  155.     byte mdm;
  156.     char pre[50];
  157.     char suf[50];
  158.     struct mnums *next;
  159. } MDM_TRNS;
  160.  
  161. /* Used to parse result codes. Filled in by user in BTCONFIG or
  162.    by default in B_INITVA. */
  163.  
  164. struct resp_str
  165. {
  166.     char *resp;
  167.     unsigned disp;
  168. };
  169.  
  170. /* Values for resp_str.disp. */
  171.  
  172. #define FAILURE   0
  173. #define IGNORE    1
  174. #define CONNECTED 2
  175. #define RINGING   3
  176. #define INCOMING  4
  177. #define    DIALRETRY 5
  178. #define FAX       16            /* Fax starts at 16 */
  179. #define ZYXFAX    17            /* Fax or'ed with 1. Next fax type = 18, then 20 */
  180.  
  181. struct prototable
  182. {
  183.     char first_char;
  184.     short entry;
  185. };
  186.  
  187. typedef struct j_types
  188. {
  189.     char j_match[30];
  190.     struct j_types *next;
  191. } J_TYPES, *J_TYPESP;
  192.  
  193. /* mailtypes bit field definitions */
  194. #define MAIL_CRASH   0x0001
  195. #define MAIL_HOLD    0x0002
  196. #define MAIL_DIRECT  0x0004
  197. #define MAIL_NORMAL  0x0008
  198. #define MAIL_REQUEST 0x0010
  199. #define MAIL_WILLGO  0x0020
  200. #define MAIL_TRIED   0x0040
  201. #define MAIL_TOOBAD  0x0080
  202. #define MAIL_UNKNOWN 0x0100
  203. #define MAIL_RES0200 0x0200
  204. #define MAIL_QSMALL  0x0400
  205. #define MAIL_RES0800 0x0800
  206. #define MAIL_RES1000 0x1000
  207. #define MAIL_RES2000 0x2000
  208. #define MAIL_RES4000 0x4000
  209. #define MAIL_RES8000 0x8000
  210.  
  211. typedef struct finfo
  212. {
  213.     int info_size;
  214.     char curr_fossil;
  215.     char curr_rev;
  216.     char far *id_string;
  217.     int ibufr;
  218.     int ifree;
  219.     int obufr;
  220.     int ofree;
  221.     byte swidth;
  222.     byte sheight;
  223.     char baud;
  224. } FOSINFO;
  225.  
  226. typedef short (*PFI3) (short, short, short, short);
  227.  
  228. typedef struct
  229. {
  230.     unsigned short background;
  231.     unsigned short settings;
  232.     unsigned short history;
  233.     unsigned short hold;
  234.     unsigned short call;
  235.     unsigned short file;
  236.     unsigned short calling;
  237.     unsigned short popup;
  238. } SB_COLORS;
  239.  
  240. /*--------------------------------------------------------------------------*/
  241. /* Sealink and Telink header structure                                      */
  242. /*--------------------------------------------------------------------------*/
  243.  
  244. #define HEADER_NAMESIZE  17
  245.  
  246. struct zero_block
  247. {
  248.     long size;                    /* file length                    */
  249.     long time;                    /* file date/time stamp           */
  250.     char name[HEADER_NAMESIZE];    /* original file name             */
  251.     char moi[15];                /* sending program name           */
  252.     char noacks;                /* for SLO                        */
  253. };
  254.  
  255. /*--------------------------------------------------------------------------*/
  256. /* NodeList.Sys                                                             */
  257. /*                                                                          */
  258. /*    NET > 0 and NODE > 0    Normal node                                   */
  259. /*                                                                          */
  260. /*    NET > 0 and NODE <= 0   Host node                                     */
  261. /*                               Net host........node== 0                   */
  262. /*                               Regional host...node==-1                   */
  263. /*                               Country host....node==-2                   */
  264. /*                                                                          */
  265. /*    NET == -1      Nodelist.Sys revision                                  */
  266. /*                                                                          */
  267. /*    NET == -2      Nodelist statement                                     */
  268. /*                                                                          */
  269. /*--------------------------------------------------------------------------*/
  270.  
  271. /*--------------------------------------------------------------------------*/
  272. /* NODE                                                                     */
  273. /* Please note the NewStyle structure (below).  Time is running out for the */
  274. /* existing `_node' structure!  Opus currently uses the old style node      */
  275. /* structure, but not for long.                                             */
  276. /*--------------------------------------------------------------------------*/
  277.  
  278. struct _node
  279. {
  280.     short number;                /* node number                              */
  281.     short net;                    /* net number                               */
  282.     short cost;                    /* cost of a message to this node           */
  283.     short rate;                    /* baud rate                                */
  284.     char name[20];                /* node name                                */
  285.     char phone[40];                /* phone number                             */
  286.     char city[40];                /* city and state                           */
  287. };
  288.  
  289. /*--------------------------------------------------------------------------*/
  290. /* THE NEWSTYLE NODE LIST IS NOW BEING USED BY OPUS 1.10                    */
  291. /*--------------------------------------------------------------------------*/
  292.  
  293. struct _newnode
  294. {
  295.     word NetNumber;
  296.     word NodeNumber;
  297.     word Cost;                    /* cost to user for a message */
  298.     char SystemName[34];        /* node name */
  299.     char PhoneNumber[40];        /* phone number */
  300.     char MiscInfo[30];            /* city and state */
  301.     char Password[8];            /* WARNING: not necessarily null-terminated */
  302.     word RealCost;                /* phone company's charge */
  303.     word HubNode;                /* this node's hub, or point number if a point */
  304.     byte BaudRate;                /* baud rate divided by 300 */
  305.     byte ModemType;                /* RESERVED for modem type */
  306.     word NodeFlags;                /* set of flags (see below) */
  307.     word NodeFiller;
  308. };
  309.  
  310. /*--------------------------------------------------------------------------*/
  311. /* nodex.ndx                                                                */
  312. /*                                                                          */
  313. /* Version 7 Nodelist Index structure.  This is a 512-byte record, which    */
  314. /* is defined by three structures:  Record 0 is the Control Record, then    */
  315. /* some number of Leaf Node (LNode) Records, then the Index Node (INode)    */
  316. /* Records.  This defines an unbalanced binary tree.                        */
  317. /*                                                                          */
  318. /* This description is based on Scott Samet's CBTREE.PAS program.           */
  319. /*                                                                          */
  320. /*--------------------------------------------------------------------------*/
  321.  
  322. struct _ndx
  323. {
  324.     union
  325.     {
  326.         struct _CtlBlk
  327.         {
  328.             word CtlBlkSize;    /* Blocksize of Index Blocks   */
  329.             long CtlRoot;        /* Block number of Root        */
  330.             long CtlHiBlk;        /* Block number of last block  */
  331.             long CtlLoLeaf;        /* Block number of first leaf  */
  332.             long CtlHiLeaf;        /* Block number of last leaf   */
  333.             long CtlFree;        /* Head of freelist            */
  334.             word CtlLvls;        /* Number of index levels      */
  335.             word CtlParity;        /* XOR of above fields         */
  336.         } CtlBlk;
  337.  
  338.         struct _INodeBlk
  339.         {
  340.             long IndxFirst;        /* Pointer to next lower level */
  341.             long IndxBLink;        /* Pointer to previous link    */
  342.             long IndxFLink;        /* Pointer to next link        */
  343.             short IndxCnt;        /* Count of Items in block     */
  344.             word IndxStr;        /* Offset in block of 1st str  */
  345.  
  346.             /* If IndxFirst is NOT -1, this is INode:          */
  347.  
  348.             struct _IndxRef
  349.             {
  350.                 word IndxOfs;    /* Offset of string into block */
  351.                 word IndxLen;    /* Length of string            */
  352.                 long IndxData;    /* Record number of string     */
  353.                 long IndxPtr;    /* Block number of lower index */
  354.             } IndxRef[20];
  355.         } INodeBlk;
  356.  
  357.         struct _LNodeBlk
  358.         {
  359.             /* IndxFirst is -1 in LNodes   */
  360.  
  361.             long IndxFirst;        /* Pointer to next lower level */
  362.             long IndxBLink;        /* Pointer to previous link    */
  363.             long IndxFLink;        /* Pointer to next link        */
  364.             short IndxCnt;        /* Count of Items in block     */
  365.             word IndxStr;        /* Offset in block of 1st str  */
  366.             struct _LeafRef
  367.             {
  368.                 word KeyOfs;    /* Offset of string into block */
  369.                 word KeyLen;    /* Length of string            */
  370.                 long KeyVal;    /* Pointer to data block       */
  371.             } LeafRef[30];
  372.         } LNodeBlk;
  373.  
  374.         char RawNdx[512];
  375.  
  376.     } ndx;
  377. };
  378.  
  379. /*--------------------------------------------------------------------------*/
  380. /*                                                                          */
  381. /* OPUS 1.20 Version 7 Nodelist structure. Copyright 1991 Wynn Wagner III   */
  382. /* and Doug Boone. Used by permission.                                      */
  383. /*                                                                          */
  384. /*--------------------------------------------------------------------------*/
  385.  
  386. struct _vers7
  387. {
  388.     short Zone;
  389.     short Net;
  390.     short Node;
  391.     short HubNode;                /* If a point, this is point number. */
  392.     word CallCost;                /* phone company's charge */
  393.     word MsgFee;                /* Amount charged to user for a message */
  394.     word NodeFlags;                /* set of flags (see below) */
  395.     byte ModemType;                /* RESERVED for modem type */
  396.     byte Phone_len;
  397.     byte Password_len;
  398.     byte Bname_len;
  399.     byte Sname_len;
  400.     byte Cname_len;
  401.     byte pack_len;
  402.     byte BaudRate;                /* baud rate divided by 300 */
  403. };
  404.  
  405. /*--------------------------------------------------------------------------*/
  406. /* Values for the `NodeFlags' field                                         */
  407. /*--------------------------------------------------------------------------*/
  408.  
  409. #define B_hub    0x0001        /* node is a net hub        0000 0000 0000 0001 */
  410. #define B_host   0x0002        /* node is a net host       0000 0000 0000 0010 */
  411. #define B_region 0x0004        /* node is region coord     0000 0000 0000 0100 */
  412. #define B_zone   0x0008        /* is a zone gateway        0000 0000 0000 1000 */
  413. #define B_CM     0x0010        /* runs continuous mail     0000 0000 0001 0000 */
  414. #define B_res1   0x0020        /* reserved by Opus         0000 0000 0010 0000 */
  415. #define B_res2   0x0040        /* reserved by Opus         0000 0000 0100 0000 */
  416. #define B_res3   0x0080        /* reserved by Opus         0000 0000 1000 0000 */
  417. #define B_res4   0x0100        /* reserved by Opus         0000 0001 0000 0000 */
  418. #define B_res5   0x0200        /* reserved for non-Opus    0000 0010 0000 0000 */
  419. #define B_res6   0x0400        /* reserved for non-Opus    0000 0100 0000 0000 */
  420. #define B_res7   0x0800        /* reserved for non-Opus    0000 1000 0000 0000 */
  421. #define B_point  0x1000        /* node is a point          0001 0000 0000 0000 */
  422. #define B_res9   0x2000        /* reserved for non-Opus    0010 0000 0000 0000 */
  423. #define B_resa   0x4000        /* reserved for non-Opus    0100 0000 0000 0000 */
  424. #define B_resb   0x8000        /* reserved for non-Opus    1000 0000 0000 0000 */
  425.  
  426. /*--------------------------------------------------------------------------*/
  427. /* Nodelist.Idx                                                             */
  428. /* (File is terminated by EOF)                                              */
  429. /*--------------------------------------------------------------------------*/
  430.  
  431. struct _ndi
  432. {
  433.     short node;                /* node number  */
  434.     short net;                /* net number   */
  435. };
  436.  
  437. /*--------------------------------------------------------------------------*/
  438. /* QuickBBS 2.00 QNL_IDX.BBS                                                */
  439. /* (File is terminated by EOF)                                              */
  440. /*--------------------------------------------------------------------------*/
  441.  
  442. struct QuickNodeIdxRecord
  443. {
  444.     unsigned short QI_Zone;
  445.     unsigned short QI_Net;
  446.     unsigned short QI_Node;
  447.     byte QI_NodeType;
  448. };
  449.  
  450. /*--------------------------------------------------------------------------*/
  451. /* QuickBBS 2.00 QNL_DAT.BBS                                                */
  452. /* (File is terminated by EOF)                                              */
  453. /*--------------------------------------------------------------------------*/
  454.  
  455. struct QuickNodeListRecord
  456. {
  457.     byte QL_NodeType;
  458.     unsigned short QL_Zone;
  459.     unsigned short QL_Net;
  460.     unsigned short QL_Node;
  461.     char QL_Name[21];            /* Pascal! 1 byte count, up to 20 chars */
  462.     char QL_City[41];            /* 1 + 40 */
  463.     char QL_Phone[41];            /* 1 + 40 */
  464.     char QL_Password[9];        /* 1 + 8 */
  465.     word QL_Flags;                /* Same as flags in new nodelist structure */
  466.     word QL_BaudRate;
  467.     word QL_Cost;
  468. };
  469.  
  470. /* SEAdog NETLIST.DOG format */
  471.  
  472. struct netls
  473. {
  474.     short netnum;
  475.     char netname[14];
  476.     char netcity[40];
  477.     short havehost;
  478.     short nethost;
  479.     short havegate;
  480.     short netgate;
  481.     long nodeptr;
  482.     short numnodes;
  483. };
  484.  
  485. /* SEAdog NODELIST.DOG format */
  486.  
  487. struct nodels
  488. {
  489.     short nodenum;
  490.     char nodename[14];
  491.     char nodecity[40];
  492.     char nodephone[40];
  493.     short havehub;
  494.     short nodehub;
  495.     short nodecost;
  496.     short nodebaud;
  497. };
  498.  
  499. /* Things most nodelists don't contain, but Binkley likes to have */
  500.  
  501. struct extrastuff
  502. {
  503.     char password[8];
  504.     unsigned short flags1;
  505.     byte modem;
  506.     char extra[5];                /* for future expansion */
  507. };
  508.  
  509. /* Format of a XMODEM block */
  510.  
  511. typedef struct
  512. {
  513.     unsigned char header;
  514.     unsigned char block_num;
  515.     unsigned char block_num_comp;
  516.     unsigned char data_bytes[128];
  517.     unsigned char data_check[2];
  518. } XMDATA, *XMDATAP;
  519.  
  520. /* Format of Telink block 0 */
  521.  
  522. typedef struct
  523. {
  524.     unsigned char header;
  525.     unsigned char block_num;
  526.     unsigned char block_num_comp;
  527.     long filelength;
  528.     union
  529.     {
  530.         struct
  531.         {
  532.             unsigned short time;
  533.             unsigned short date;
  534.         } twowords;
  535.  
  536.         struct
  537.         {
  538.             unsigned long timedate;
  539.         } oneword;
  540.     } filetime;
  541.     char filename[16];
  542.     char nullbyte;
  543.     char sendingprog[15];
  544.     char noacks;
  545.     unsigned char crcmode;
  546.     char fill[86];
  547.     unsigned char data_check[2];
  548. } TLDATA, *TLDATAP;
  549.  
  550. /* Format of SEAlink block 0 */
  551.  
  552. typedef struct
  553. {
  554.     unsigned char header;
  555.     unsigned char block_num;
  556.     unsigned char block_num_comp;
  557.     long filelength;
  558.     unsigned long timedate;
  559.     char filename[17];
  560.     char sendingprog[15];
  561.     char SLO;
  562.     char Resync;
  563.     char MACFLOW;
  564.     char fill[85];
  565.     unsigned char data_check[2];
  566. } SEADATA, *SEADATAP;
  567.  
  568. typedef struct
  569. {
  570.     unsigned int SEAlink:1;        /* Can do SEAlink */
  571.     unsigned int SLO:1;            /* Can do SEAlink with Overdrive */
  572.     unsigned int Resync:1;        /* Can do SEAlink with Resync */
  573.     unsigned int MacFlow:1;        /* Can do SEAlink with Macintosh flow control */
  574.     unsigned int do_CRC:1;        /* Should do CRC instead of checksum */
  575.     unsigned int TeLink:1;        /* We saw a TeLink header */
  576. } TRANS, *TRANSP;
  577.  
  578. typedef struct
  579. {
  580.     char *state_name;
  581.     short (*state_func) (void *);
  582. } STATES, *STATEP;
  583.  
  584. typedef struct
  585. {
  586.     long control;                /* We will always have a long on top */
  587.     long filler;                /* Just to be sure. Min size, 8 bytes*/
  588. } STATEBASE, *STATEBASEP;
  589.  
  590. typedef struct
  591. {
  592.     long control;                /* These must always start with a long! */
  593.     TRANS options;                /* Transfer options */
  594.     short result;                /* Result from last operation */
  595.     short sub_results;            /* Extra result codes */
  596.     long T1;                    /* General purpose timer */
  597.     long T2;                    /* General purpose timer */
  598.     short Window;                /* SEAlink window size */
  599.     long SendBLK;                /* Current block to be sent */
  600.     long NextBLK;                /* Next block we will try to send */
  601.     long ACKBLK;                /* Block that was last ACK'd */
  602.     long LastBlk;                /* Last block in file */
  603.     long ARBLK;                    /* Used in ACK Check calculations */
  604.     long WriteBLK;                /* Block number to write to file */
  605.     long filelen;                /* Length of file being sent */
  606.     long curr_byte;                /* Current byte offset of sending or receiving */
  607.     long prev_bytes;            /* Bytes that we are resyncing over */
  608.     long total_blocks;            /* Total number of blocks in file to be received */
  609.     long resync_block;            /* Block number we received to resync to */
  610.     short NumNAK;                /* Number of NAK's received this block */
  611.     short ACKsRcvd;                /* Number of ACK's received since file start */
  612.     short ACKST;                /* Current state of the ack/nak state variable */
  613.     short tries;                /* Number of tries thus far */
  614.     short goodfile;                /* 0 if file was bad, 1 if file was good */
  615.     short datalen;                /* Length of data in this block */
  616.     short recblock;                /* Block number received */
  617.     short sent_ACK;                /* Whether or not we sent an ACK already */
  618.     short tot_errs;                /* Total number of errors */
  619.     unsigned char ARBLK8;        /* 8 bit value of ARBLK */
  620.     unsigned char blocknum;        /* 8 bit value of SendBLK */
  621.     unsigned char check;        /* checksum value */
  622.     unsigned char save_header;    /* Received header from first block */
  623.     short CHR;                    /* General purpose receive character */
  624.     union                        /* File date and time in Telink or SEAlink format */
  625.     {
  626.         struct
  627.         {
  628.             unsigned short time;
  629.             unsigned short date;
  630.         } twowords;
  631.  
  632.         struct
  633.         {
  634.             unsigned long timedate;
  635.         } oneword;
  636.     }
  637.     save_filetime;
  638.     char received_name[20];        /* Received filename from Telink or SEAlink */
  639.     char m7name[12];            /* Filename in Modem7 format */
  640.     char sending_program[16];    /* Sending program name                    */
  641.     char *filename;                /* The filename to be sent or received */
  642.     char *path;                    /* Just the path to the file to be sent/received */
  643.     char *fptr;                    /* Pointer into character fields */
  644.     char *temp_name;            /* Temporary name for receiving */
  645.     FILE *file_pointer;            /* The pointer for read/write/seek operations */
  646.  
  647.     unsigned char header;
  648.     unsigned char block_num;
  649.     unsigned char block_num_comp;
  650.     unsigned char data[128];
  651.     unsigned char data_check[2];
  652. } XMARGS, *XMARGSP;
  653.  
  654. #define DID_RESYNC 1
  655.  
  656. typedef struct
  657. {
  658.     long control;                /* These must always start with a long! */
  659.     short tries;
  660.     short barklen;
  661.     short barkok;
  662.     long T1;
  663.     short nfiles;
  664.     char *inbound;
  665.     char *filename;
  666.     char barkpacket[128];
  667.     char *barkpw;
  668.     char *barktime;
  669. } BARKARGS, *BARKARGSP;
  670.  
  671. /*--------------------------------------------------------------------------*/
  672. /* FIDONET ADDRESS STRUCTURE                                                */
  673. /*--------------------------------------------------------------------------*/
  674.  
  675. typedef struct _ADDRESS
  676. {
  677.     word Zone;
  678.     word Net;
  679.     word Node;
  680.     word Point;
  681.     char *Domain;
  682. } ADDR, *ADDRP;
  683.  
  684. typedef struct _DOMAINKLUDGE
  685. {
  686.     word zone;
  687.     word domain;
  688. } DOMAINKLUDGE;
  689.  
  690. typedef struct mail
  691. {
  692.     ADDR mail_addr;                /* Addressee */
  693.     unsigned short numfiles;    /* Total number of packets and files      */
  694.     unsigned short mailtypes;    /* Bitmask of types we have for addressee */
  695.     unsigned long mailsize;        /* Total amount of mail for addressee     */
  696.     unsigned long callsize;        /* Amount of mail that isn't on hold      */
  697.     unsigned long oldest;        /* time_t of oldest mail                  */
  698.     struct mail *next;
  699.     struct mail *prev;
  700. } MAIL, *MAILP;
  701.  
  702. typedef int (*nfunc) (ADDR *, int);
  703. typedef void (*ufunc) (char *, ADDR *);
  704.  
  705. #define    MAX_EXTERN    8
  706. #define    ALIAS_CNT    25
  707.  
  708. /*--------------------------------------------------------------------------*/
  709. /* Matrix mask                                                              */
  710. /* Undefined bits are reserved by Opus                                      */
  711. /*--------------------------------------------------------------------------*/
  712.  
  713. #define NO_TRAFFIC    0x0001
  714. #define LOCAL_ONLY    0x0002
  715. #define OPUS_ONLY    0x0004
  716.  
  717. #define NO_EXITS    0x2000
  718. #define MAIL_ONLY    0x4000
  719. #define TAKE_REQ    0x8000
  720.  
  721. /*--------------------------------------------------------------------------*/
  722. /* Message packet header                                                    */
  723. /*--------------------------------------------------------------------------*/
  724.  
  725. #define PKTVER    2
  726.  
  727. /*--------------------------------------------*/
  728. /* POSSIBLE VALUES FOR `product' (below)      */
  729. /*                                            */
  730. /* NOTE: These product codes are assigned by  */
  731. /* the FidoNet<tm> Technical Stardards Com-   */
  732. /* mittee.  If you are writing a program that */
  733. /* builds packets, you will need a product    */
  734. /* code.  Please use ZERO until you get your  */
  735. /* own.  For more information on codes, write */
  736. /* to FTSC at 115/333.                        */
  737. /*                                            */
  738. /*--------------------------------------------*/
  739.  
  740. #define isFIDO        0
  741. #define isANXCLO    4
  742. #define isOPUS        5
  743. #define isIGOR        65
  744. #define isTIMS        66
  745. #define isBITBRAIN    0x1b
  746. #define isDBRIDGE    0x1d
  747. #define isMILQUE    0xac
  748.  
  749. #ifndef PRDCT_CODE
  750. #define PRDCT_CODE        isBITBRAIN
  751. #endif
  752.  
  753. #ifndef PRDCT_MAJOR
  754. #define PRDCT_MAJOR        2
  755. #endif
  756.  
  757. #ifndef PRDCT_MINOR
  758. #define PRDCT_MINOR        60
  759. #endif
  760.  
  761. #ifndef PRDCT_PRFX
  762. #define PRDCT_PRFX        "BINKLEY"
  763. #endif
  764.  
  765. #ifndef PRDCT_PRTY
  766. #define PRDCT_PRTY        "BinkleyTerm"
  767. #endif
  768.  
  769. #ifndef PRD_SH_PRTY
  770. #define PRD_SH_PRTY        "Binkley"
  771. #endif
  772.  
  773. #ifndef PRDCT_SHRT
  774. #define PRDCT_SHRT        "Bink"
  775. #endif
  776.  
  777. #ifndef PRDCT_VRSN
  778. #define PRDCT_VRSN        "2.60"
  779. #endif
  780.  
  781. struct _pkthdr
  782. {
  783.     short orig_node;        /* originating node               */
  784.     short dest_node;        /* destination node               */
  785.     short year;                /* 0..99  when packet was created */
  786.     short month;            /* 0..11  when packet was created */
  787.     short day;                /* 1..31  when packet was created */
  788.     short hour;                /* 0..23  when packet was created */
  789.     short minute;            /* 0..59  when packet was created */
  790.     short second;            /* 0..59  when packet was created */
  791.     short rate;                /* destination's baud rate        */
  792.     short ver;                /* packet version, must be 2      */
  793.     short orig_net;            /* originating network number     */
  794.     short dest_net;            /* destination network number     */
  795.     char product;            /* product type                   */
  796.     char serial;            /* serial number (some systems)   */
  797.  
  798.     byte password[8];        /* session/pickup password        */
  799.     short orig_zone;        /* originating zone               */
  800.     short dest_zone;        /* Destination zone               */
  801.     byte B_fill2[16];
  802.     long B_fill3;
  803. };
  804.  
  805. struct _pkthdr45            /* FSC-0045 (2.2) packet type     */
  806. {
  807.     short orig_node;        /* originating node               */
  808.     short dest_node;        /* destination node               */
  809.     short orig_point;        /* originating point              */
  810.     short dest_point;        /* destination point              */
  811.     byte b_fill1[8];        /* Unused, must be zero           */
  812.     short subver;            /* packet subversion, must be 2   */
  813.     short ver;                /* packet version, must be 2      */
  814.     short orig_net;            /* originating network number     */
  815.     short dest_net;            /* destination network number     */
  816.     char product;            /* product type                   */
  817.     char serial;            /* serial number (some systems)   */
  818.  
  819.     byte password[8];        /* session/pickup password        */
  820.     short orig_zone;        /* originating zone               */
  821.     short dest_zone;        /* Destination zone               */
  822.     byte orig_domain[8];    /* originating domain             */
  823.     byte dest_domain[8];    /* destination domain             */
  824.     long B_fill3;
  825. };
  826.  
  827. struct _pkthdr39            /* FSC-0039 packet type           */
  828. {
  829.     short orig_node;        /* originating node               */
  830.     short dest_node;        /* destination node               */
  831.     short year;                /* 0..99  when packet was created */
  832.     short month;            /* 0..11  when packet was created */
  833.     short day;                /* 1..31  when packet was created */
  834.     short hour;                /* 0..23  when packet was created */
  835.     short minute;            /* 0..59  when packet was created */
  836.     short second;            /* 0..59  when packet was created */
  837.     short rate;                /* destination's baud rate        */
  838.     short ver;                /* packet version, must be 2      */
  839.     short orig_net;            /* originating network number     */
  840.     short dest_net;            /* destination network number     */
  841.     byte product_low;        /* FTSC product type (low byte)   */
  842.     byte prod_rev_low;        /* product rev (low byte)         */
  843.  
  844.     byte password[8];        /* session/pickup password        */
  845.     short zone_ignore[2];    /* Zone info from other software  */
  846.     byte B_fill1[2];
  847.     short CapValid;            /* CapWord with bytes swapped.    */
  848.     byte product_hi;        /* FTSC product type (high byte)  */
  849.     byte prod_rev_hi;        /* product rev (hi byte)          */
  850.     short CapWord;            /* Capability word                */
  851.     short orig_zone;        /* originating zone               */
  852.     short dest_zone;        /* Destination zone               */
  853.     short orig_point;        /* originating point              */
  854.     short dest_point;        /* destination point              */
  855.     long ProdData;            /* Product-specific data          */
  856. };
  857.  
  858. /*--------------------------------------------------------------------------*/
  859. /* WaZOO                                                                    */
  860. /*--------------------------------------------------------------------------*/
  861.  
  862. #ifndef ACK
  863. #define ACK    0x06
  864. #endif
  865.  
  866. #ifndef NAK
  867. #define NAK    0x15
  868. #endif
  869.  
  870. #ifndef ENQ
  871. #define ENQ    0x05
  872. #endif
  873.  
  874. #ifndef YOOHOO
  875. #define YOOHOO 0x00f1
  876. #endif
  877.  
  878. #ifndef  TSYNC
  879. #define  TSYNC 0x00ae
  880. #endif
  881.  
  882. struct _Hello
  883. {
  884.     word signal;            /* always 'o'     (0x6f)                   */
  885.     word hello_version;        /* currently 1    (0x01)                   */
  886.     word product;            /* product code                            */
  887.     word product_maj;        /* major revision of the product           */
  888.     word product_min;        /* minor revision of the product           */
  889.     char my_name[60];        /* Other end's name                        */
  890.     char sysop[20];            /* sysop's name                            */
  891.     word my_zone;            /* 0== not supported                       */
  892.     word my_net;            /* out primary net number                  */
  893.     word my_node;            /* our primary node number                 */
  894.     word my_point;            /* 0== not supported                       */
  895.     byte my_password[8];    /* ALL 8 CHARACTERS ARE SIGNIFICANT !!!!!  */
  896.     byte reserved2[8];        /* reserved by Opus                        */
  897.     word capabilities;        /* see below                               */
  898.     byte reserved3[12];        /* available to non-Opus                   */
  899.                             /* systems by prior "approval" of 124/108. */
  900. };                            /* size 128 bytes */
  901.  
  902. /*--------------------------------------------------------------------------*/
  903. /* YOOHOO<tm> CAPABILITY VALUES                                             */
  904. /*--------------------------------------------------------------------------*/
  905.  
  906. #define Y_DIETIFNA    0x0001
  907. #define FTB_USER    0x0002
  908. #define ZED_ZIPPER    0x0004
  909. #define ZED_ZAPPER    0x0008
  910. #define DOES_IANUS    0x0010
  911. #define DOES_HYDRA    0x0020
  912. #define Bit_6        0x0040
  913. #define Bit_7        0x0080
  914. #define Bit_8        0x0100
  915. #define Bit_9        0x0200
  916. #define Bit_a        0x0400
  917. #define Bit_b        0x0800
  918. #define Bit_c        0x1000
  919. #define Bit_d        0x2000
  920. #define DO_DOMAIN    0x4000
  921. #define WZ_FREQ        0x8000
  922.  
  923. /*--------------------------------------------------------------------------*/
  924. /* EMSI                                                                     */
  925. /*--------------------------------------------------------------------------*/
  926.  
  927. /* Indexes into the emsistr array for use by EMSI parsing */
  928.  
  929. #define EMSI_REQ   0
  930. #define EMSI_DAT   1
  931. #define EMSI_HBT   2
  932. #define EMSI_NAK   3
  933. #define EMSI_ACK   4
  934. #define EMSI_INQ   5
  935. #define EMSI_CLI   6
  936.  
  937. #define EMSI_LEN   14     /* longest emsi string */
  938. #define EMSI_MAX   6      /* highest emsi string */
  939.  
  940. #endif                /* BINK_DEFINED */
  941.  
  942. /* END OF FILE: bink.h */
  943.  
  944.